﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Contract.Business.Entity;
using Contract.Business.Filter;
using Generic.Business.Process;
using Contract.Business.Manager;
using Contract.Business.Validation;

namespace Contract.Business.Process
{
    //Criado por : Gustavo
    //Data       : 9/28/2011 11:38:37 PM
    public class BPRegiaoEntrega : BPGeneric<BERegiaoEntrega, BMRegiaoEntrega, BVRegiaoEntrega, FERegiaoEntrega>
    {
        #region Singleton
        private BPVenda bpVenda;
        private BPVenda processVenda
        {
            get
            {
                if (bpVenda == null)
                    bpVenda = new BPVenda();

                return bpVenda;
            }
        }

        private BPCliente bpCliente;
        private BPCliente processCliente
        {
            get
            {
                if (bpCliente == null)
                    bpCliente = new BPCliente();

                return bpCliente;
            }
        }
        #endregion

        public override void Excluir(BERegiaoEntrega entidade)
        {
                string msg = ValidarExclusao(entidade);

                if (!String.IsNullOrEmpty(msg))
                    throw new Exception(msg);

                base.Excluir(entidade);
        }

        public override void ExcluirLista(List<BERegiaoEntrega> entidades)
        {
            try
            {
                foreach (BERegiaoEntrega regiao in entidades)
                {
                    string msg = ValidarExclusao(regiao);

                    if (!String.IsNullOrEmpty(msg))
                        throw new Exception(msg);
                }

                base.ExcluirLista(entidades);
            }
            catch (Exception)
            {
                throw;
            }
        }

        private string ValidarExclusao(BERegiaoEntrega entidade)
        {
            try
            {
                List<BEVenda> vendas = processVenda.ObterTodos(new FEVenda() { CodigoRegiaoEntrega = entidade.Codigo });
                if (vendas != null && vendas.Count() > 0)
                    return "Não é possível excluir estas regiões pois existem vendas cadastradas para elas.";

                List<BECliente> clientes = processCliente.ObterTodos(new FECliente() { CodigoRegiaoEntrega = entidade.Codigo });
                if (clientes != null && clientes.Count > 0)
                    return "Não é possível excluir esta região de entrega, pois existem clientes vinculados a ela.";

                return String.Empty;
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}
